Python site
このモジュールは初期化中に自動的にインポートされます。
Importing this module will append site-specific paths to the module search path and add a few builtins, unless -S was used.
site.main() 関数の処理は、前部と後部からなる最大で四つまでのディレクトリを構築するところから始まります。
原文 It starts by constructing up to four directories from a head and a tail part.
文字列の組み合わせのことを言っている(TODO)
前部では sys.prefix と sys.exec_prefix を使用します; 空の前部は使われません。
後部では、1つ目は空文字列を使い、2つ目は lib/site-packages (Windows) または lib/pythonX.Y/site-packages (Unix と macOS) を使います。
前部-後部の異なる組み合わせごとに、それが存在しているディレクトリを参照しているかどうかを調べ、存在している場合は sys.path へ追加します。 そして、新しく追加されたパスからパス設定ファイルを検索します。
"pyvenv.cfg" という名前のファイルが上で挙げたディレクトリの 1 つに存在していた場合、 sys.executable, sys.prefix, sys.exec_prefix にはそのディレクトリが設定され、 site-packages もチェックします
パス設定ファイルは name.pth という形式の名前をもつファイルで、上の4つのディレクトリのひとつにあります。その内容は sys.path に追加される追加項目(一行に一つ)です。
.pth ファイル内の実行可能な行は、特定のモジュールが実際に使用されるかどうかに関係なく、Pythonの起動時に毎回実行されます。
例えば、 sys.prefix と sys.exec_prefix が /usr/local に設定されていると仮定します。そのときPython X.Y ライブラリは /usr/local/lib/pythonX.Y にインストールされています。ここにはサブディレクトリ /usr/local/lib/pythonX.Y/site-packages があり、その中に三つのサブディレクトリ foo, bar および spam と二つのパス設定ファイル foo.pth と bar.pth をもつと仮定します。
code:foo.pth
foo
bar
bletch
code:bar.pth
bar
次のバージョンごとのディレクトリが sys.path へこの順番で追加されます:
code:txt
/usr/local/lib/pythonX.Y/site-packages/bar
/usr/local/lib/pythonX.Y/site-packages/foo
bletch は存在しないため省略されるということに注意してください。
bar ディレクトリは foo ディレクトリの前に来ます。なぜなら、 bar.pth がアルファベット順で foo.pth の前に来るからです。
また、 spam はどちらのパス設定ファイルにも記載されていないため、省略されます。
IMO:通常のpip installでは、.pthファイルを使う必要はないのでは?(editable installで使っているのかな? TODO)
python -m site
--user-site
ユーザの site-packages ディレクトリを表示します。
参考